+use std::collections::HashMap;
use std::fmt::{self, Formatter};
use std::hash;
use std::slice;
#[derive(RustcEncodable)]
struct SerializedPackage<'a> {
- name: String,
- version: String,
+ name: &'a str,
+ version: &'a str,
+ id: &'a PackageId,
+ source: &'a SourceId,
dependencies: &'a [Dependency],
- targets: Vec<Target>,
- manifest_path: String,
+ targets: &'a [Target],
+ features: &'a HashMap<String, Vec<String>>,
+ manifest_path: &'a str,
}
impl Encodable for Package {
fn encode<S: Encoder>(&self, s: &mut S) -> Result<(), S::Error> {
- let manifest = self.manifest();
- let summary = manifest.summary();
+ let summary = self.manifest.summary();
let package_id = summary.package_id();
SerializedPackage {
- name: package_id.name().to_string(),
- version: package_id.version().to_string(),
+ name: &package_id.name(),
+ version: &package_id.version().to_string(),
+ id: package_id,
+ source: summary.source_id(),
dependencies: summary.dependencies(),
- targets: manifest.targets().to_vec(),
- manifest_path: self.manifest_path.display().to_string()
+ targets: &self.manifest.targets(),
+ features: summary.features(),
+ manifest_path: &self.manifest_path.display().to_string(),
}.encode(s)
}
}
fn setup() {}
+fn remove_all_whitespace(s: &str) -> String {
+ s.split_whitespace().collect()
+}
+
fn read_manifest_output() -> String {
- "\
-{\
- \"name\":\"foo\",\
- \"version\":\"0.5.0\",\
- \"dependencies\":[],\
- \"targets\":[{\
- \"kind\":[\"bin\"],\
- \"name\":\"foo\",\
- \"src_path\":\"src[..]foo.rs\"\
- }],\
- \"manifest_path\":\"[..]Cargo.toml\"\
-}".into()
+ remove_all_whitespace(r#"
+{
+ "name":"foo",
+ "version":"0.5.0",
+ "id":"foo[..]0.5.0[..](path+file://[..]/foo)",
+ "source":null,
+ "dependencies":[],
+ "targets":[{
+ "kind":["bin"],
+ "name":"foo",
+ "src_path":"src[..]foo.rs"
+ }],
+ "features":{},
+ "manifest_path":"[..]Cargo.toml"
+}"#)
}
test!(cargo_read_manifest_path_to_cargo_toml_relative {